#include "VentanaEscenarios.h"
#include "VentanaEditarEsc.h"
#include "Cuadrado.h"
#include "Posicion.h"
#include "Rectangulo.h"
#include "ControladorVentana.h"
#include "ControladorVentanaEditEscenario.h"
VentanaEscenarios::VentanaEscenarios()
{
}

VentanaEscenarios::VentanaEscenarios(std::string nombre)
{
	this->alto = 700;
	this->ancho = 900;
	this->nombre = nombre;
	this->colorFondoVentana = new Color(255,160,122);

	//Ventana de escenarios
	Posicion* poscajaEsc = new Posicion(50,20);
	Rectangulo* cajaEsc = new Rectangulo("cajaesc",800,500,poscajaEsc);
	this->addFigura(cajaEsc);

	//listado de escenarios
	this->agregarListaDeArchivos();

	Posicion* posLabelDirectorio = new Posicion(51,21);
	Rectangulo* cajaLalala = new Rectangulo("lalala",799,20,posLabelDirectorio);
	this->addFigura(cajaLalala);
	Texto* milistado = new Texto("textoLista", "Lalala", 20, posLabelDirectorio);
	this->addFigura(milistado);

	Posicion* posLabelDirectorio2 = new Posicion(51,41);
	Rectangulo* cajaLalala2 = new Rectangulo("lalala2",799,20,posLabelDirectorio2);
	this->addFigura(cajaLalala2);
	Texto* milistado2 = new Texto("textoLista2", "Lalala2", 20, posLabelDirectorio2);
	this->addFigura(milistado2);

	//Boton Borrar
	Posicion* posBtBorrar = new Posicion(680,535);
	Rectangulo* btBorrar = new Rectangulo("btBorrar",100,35,posBtBorrar);
	this->addFigura(btBorrar);

	//label bt borrar
	Posicion* posLabelBtBorrar = new Posicion(680,535);
	Texto* labelBtBorrar = new Texto("lbBorrar"," Borrar",30,posLabelBtBorrar);
	this->addFigura(labelBtBorrar);

	//Boton Abrir
	Posicion* posBtAbrir = new Posicion(790,535);
	Rectangulo* btAbrir = new Rectangulo("btAbrir",100,35,posBtAbrir);
	this->addFigura(btAbrir);	

	//label bt abrir
	Posicion* posLabelBtAbrir = new Posicion(790,535);
	Texto* labelBtAbrir = new Texto("lbAbrir","  Abrir",30,posLabelBtAbrir);
	this->addFigura(labelBtAbrir);

	//Area de texto
	Posicion* posareaTxt = new Posicion(50,595);
	Rectangulo* areaTxt = new Rectangulo("areatext",650,35,posareaTxt);
	this->addFigura(areaTxt);

	//Boton Crear
	Posicion* posBtCrear = new Posicion(790,595);
	Rectangulo* btCrear = new Rectangulo("btCrear",100,35,posBtCrear);
	this->addFigura(btCrear);
	//label bt crear
	Posicion* posLabelBtCrear = new Posicion(790,595);
	Texto* labelBtCrear = new Texto("lbCrear","  Crear",30,posLabelBtCrear);
	this->addFigura(labelBtCrear);

	//Boton Salir
	Posicion* posBtSalir = new Posicion(790,655);
	Rectangulo* btSalir = new Rectangulo("btSalir",100,35,posBtSalir);
	this->addFigura(btSalir);

	//label bt salir
	Posicion* posLabelBtSalir = new Posicion(790,655);
	Texto* labelBtSalir = new Texto("lbSalir","  Salir",30,posLabelBtSalir);
	this->addFigura(labelBtSalir);


}

void VentanaEscenarios::agregarListaDeArchivos() {
	Listado* listado = new Listado();
	vector<string> escenarios = listado->listarDirectorio();
	int i = 0;

	for(vector<string>::iterator iterXml = escenarios.begin(); iterXml != escenarios.end(); ++iterXml) {
		//cout << *iterXml << endl;
		Posicion* posLabelDirectorio = new Posicion(51,21 + (i*20));
		Rectangulo* cajaLalala = new Rectangulo(*iterXml, 799, 20, posLabelDirectorio);
		this->addFigura(cajaLalala);
		Texto* milistado = new Texto("textoLista" + i, *iterXml, 20, posLabelDirectorio);
		this->addFigura(milistado);
		i++;
	}
}

VentanaEscenarios* VentanaEscenarios::unicaInstancia = 0;

VentanaEscenarios* VentanaEscenarios::obtenerInstancia(){

	if(!VentanaEscenarios::unicaInstancia){
		VentanaEscenarios::unicaInstancia = new VentanaEscenarios("     Escenarios");
	}

	return VentanaEscenarios::unicaInstancia;
}


VentanaEscenarios::~VentanaEscenarios(void)
{
}

int VentanaEscenarios::graficar(){
	int done = 0;
	this->iniciarSdl();
	this->pintarPantalla();
	std::list<Figura*>::iterator iter;
	iter = this->iteratorListaFiguras();
	Color* colorBtnApretado = new Color(72,61,139);
	Color* colorBtnNoApretado = new Color(220,220,220);
	bool terminar = false;
	SDL_Event evento;
	int i = 1;
	Figura *figura;
	while(i<=this->sizeListaFiguras()){
		figura = *iter;
			figura->dibujar(this->screen);
		iter++;
		i++;
	}
	int cont=0;
	//loop
	while(terminar == false) {
	cont++;	
	SDL_Flip(this->getScreen());//encargado de que se repinte		
		// Control de Eventos
	while (SDL_PollEvent(&evento)) {

    int x = 0, y = 0;
    //si se mueve el mouse
    if( evento.type == SDL_MOUSEMOTION )
    {
        x = evento.motion.x;
        y = evento.motion.y;
		i=1;
		iter = this->iteratorListaFiguras();
		while(i<=this->sizeListaFiguras()){
		figura = *iter;
			if( figura->pertenecePixel(x,y))
			{ 
			figura->setColorFigura(colorBtnApretado);
			figura->dibujar(this->screen);
			}
			else
			{
				figura->setColorFigura(colorBtnNoApretado);
				figura->dibujar(this->screen);
			}
		iter++;
		i++;
		}  
					SDL_Flip(this->getScreen());//encargado de que se repinte	
    }//if evento movimiento de mouse
	 if( evento.type == SDL_MOUSEBUTTONDOWN )
    {
        //If the left mouse button was pressed
        if( evento.button.button == SDL_BUTTON_LEFT )
        {
            //Get the mouse offsets
            x = evento.button.x;
            y = evento.button.y;
        
           i=1;
		iter = this->iteratorListaFiguras();
		while(i<=this->sizeListaFiguras()){
		figura = *iter;
			if( figura->pertenecePixel(x,y))
			{ 
				std::cout<< figura->getId().c_str() <<std::endl;
				
				//Evento sobre boton crear
				if (figura->getId().compare("btCrear") == 0){
					//ADAPTACION
					Ventana* ventEditarEsc = new VentanaEditarEsc("CRAZY TANKS :: Desierto");
					ControladorVentana *controladorVentEditEsc = new ControladorVentanaEditEscenario((VentanaEditarEsc*)ventEditarEsc);
					controladorVentEditEsc->crearVentana();
					controladorVentEditEsc->controlarEventos();
					
					SDL_FreeSurface(ventEditarEsc->getScreen());
			
					delete ventEditarEsc;
					delete controladorVentEditEsc;			
					//terminar = true;
				}
				//Evento sobre boton salir
				if (figura->getId().compare("btSalir") == 0){
					terminar=true;
				}
				
			}
			
		iter++;
		i++;
		}  
        }
    }
			if(evento.type == SDL_KEYDOWN) {
				if(evento.key.keysym.sym == SDLK_ESCAPE)
					terminar = true;
			}
			if(evento.type == SDL_QUIT){
				terminar = true;
			}
		}

		if (cont % 1000 == 0){
				printf("loop nro: %i\n",cont);
			}
	}//end loop

	return 0;
}
